home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / isetl.arc / primeg.t < prev    next >
Text File  |  1987-08-20  |  1KB  |  62 lines

  1. $ A generator is a function of no parameters that returns a sequence
  2. $ of values, a new element each time it is invoked.
  3.  
  4. $ returns generator of [3,5..]
  5.  
  6. odds :=
  7.     func(); local last;
  8.     last := 1;
  9.     return    func();
  10.             last := last+2;
  11.             return last;
  12.         end;
  13.     end;
  14.  
  15.  
  16. $ returns generator of all primes >= 3
  17.  
  18. primes :=
  19.     func();
  20.     return    someprimes( odds() );
  21.     end;
  22.  
  23.  
  24. $ returns generator of primes in S, where S is a generator,
  25. $ S is increasing and contains all integers relatively prime to 
  26. $ all x < S(1)
  27.  
  28. someprimes :=
  29.     func( S );
  30.     local first, rest;
  31.     return    func();
  32.             if first = OM then
  33.             first := S();
  34.             rest := someprimes( primewrt( first, S ) );
  35.             return first;
  36.             else
  37.             return rest();
  38.             end;
  39.         end;
  40.     end;
  41.  
  42. $ returns generator of elements of S that are prime wrt x
  43.  
  44. primewrt :=
  45.     func(x,S);
  46.     return    func();
  47.             local next;
  48.             next := S();
  49.             while next mod x = 0 do
  50.             next := S();
  51.             end;
  52.             return next;
  53.         end;
  54.     end;
  55.  
  56.  
  57. p := primes();
  58.  
  59. for i in [1..10] do
  60.     print p();
  61. end;
  62.